package negocio.aluno;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import negocio.matricula.ListaMatriculas;
import negocio.matricula.Matricula;
import dados.aluno.AlunoNaoExistenteException;
import dados.aluno.AlunosSemCapacidadeArmazenamentoException;
import dados.aluno.RepositorioAlunosArray;

public class CadastroAlunos {
	
	private RepositorioAlunosArray alunos;
	
	public CadastroAlunos(RepositorioAlunosArray r) {
		this.alunos = r;
	}
	
	public void salvarArquivo(String nomeArquivo) throws Exception{
		FileOutputStream saveFile = new FileOutputStream(nomeArquivo);
		ObjectOutputStream save = new ObjectOutputStream(saveFile);
		save.writeObject(this.alunos);
		save.close();
	}
	public void cadastrar(Aluno aluno) throws AlunoJaCadastradoException, AlunosSemCapacidadeArmazenamentoException{
		if (!alunos.existe(aluno.getNome())) {
			alunos.inserir(aluno);
		}
		else {
			throw new AlunoJaCadastradoException(aluno.getNome());
		}
	}
	
	public Aluno procurar(String nome) throws AlunoNaoExistenteException{
		return alunos.procurar(nome);
	}
	
	public void atualizar(Aluno aluno) throws AlunoNaoExistenteException{
		alunos.atualizar(aluno);
	}
	
	public void descadastrar(Aluno aluno) throws AlunoNaoExistenteException{
		alunos.descadastrar(aluno);
	}
	public ListaAlunos listarAlunosTodosCursos(ListaMatriculas listaMatriculas) {
		Aluno[] alunos= null;
		Aluno aluno = null;
		Matricula[] matriculas= null;
		Matricula matricula = null;
		int temIgual = 0;
		matriculas = listaMatriculas.getMatriculas().getMatriculas();
		alunos = this.alunos.getAlunos();
	
		int numeroAlunos = this.alunos.getIndice();
		int numeroMatriculas = listaMatriculas.getMatriculas().getIndice();
		
		ListaAlunos la = new ListaAlunos();
		for (int i = 0; i < numeroAlunos; i++) {
			aluno = alunos[i];
			temIgual = 0;
			for (int x = 0; x < numeroMatriculas; x++) {
				matricula = matriculas[x];
				if (matricula.getAluno().equals(aluno)) {
					temIgual = 1;
				}
			}
			if (temIgual == 1) {
				la.insert(aluno);
			}
			
		}
		return la;
	}
	
	//listar todos os alunos
	public ListaAlunos listarAlunos() {
		Aluno[] alunos= null;
		Aluno aluno= null;
		alunos = this.alunos.getAlunos();
		int numeroAlunos = this.alunos.getIndice();
		ListaAlunos la = new ListaAlunos();
		for (int i = 0; i < numeroAlunos; i++) {
			aluno = alunos[i];
			la.insert(aluno);
		}
		return la;
	}

}
